CyberHunter is an automated reconnaissance and asset discovery framework designed to streamline security assessments. It integrates a suite of popular open-source tools into a cohesive pipeline, managed via a web interface or a REST API, and provides powerful visualization of discovered assets.
- Multi-Source Reconnaissance: Gathers data using passive DNS, active brute-forcing, ASN lookups, and organization name expansion.
- Modular Plugin System: Easily extendable architecture for wrapping and integrating any command-line security tool.
- Web Dashboard: A user-friendly Flask-based interface for managing scans, reviewing discovered assets, and visualizing results.
- 3D Graph Visualization: An interactive 3D force-directed graph helps visualize the relationships between targets, assets, and vulnerabilities.
- REST API: A secure, key-based API for programmatic control over scans and results retrieval.
- Scope Management: Clearly define in-scope and out-of-scope targets using wildcard rules.
CyberHunter consists of three main components:
- Core Engine: Orchestrates the reconnaissance pipeline, from initial target parsing to running discovery and enrichment plugins.
- Plugins: Wrappers around external tools like Subfinder, Nmap, httpx, and Nuclei.
- Web Application: A Flask server that provides the user dashboard and the REST API.
- Python 3.9+
- Go (for installing most of the security tools)
- A number of external security tools (see
scripts/install_tools.sh)
A convenience script is provided to install all required Go tools and Python packages on Debian-based systems.
# Clone the repository
git clone https://github.com/your-username/cyberhunter-3d.git
cd cyberhunter-3d
# Run the installer
chmod +x scripts/install_tools.sh
./scripts/install_tools.sh
# Install Python dependencies
pip install -r requirements.txtBefore running the application, create a .env file in the project root. You can copy the example file:
cp .env.example .envNow, open the .env file and set a strong, unique SECRET_KEY.
This project uses Flask-Migrate to handle database schema migrations.
# To set the FLASK_APP environment variable
export FLASK_APP=run_web.py
# For the first time setup:
flask db init
# For creating a new migration after changing models:
flask db migrate -m "Initial migration."
# To apply the migration to the database:
flask db upgradepython run_web.pyNavigate to http://127.0.0.1:5001 to access the dashboard.
You can create and manage scans programmatically. First, retrieve your API key from the "Profile" page in the web UI.
Example: Start a new scan
curl -X POST http://127.0.0.1:5001/api/v1/scans \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{
"targets": ["example.com", "*.example.com"],
"in_scope_rules": "*.example.com",
"out_of_scope_rules": "api.example.com"
}'Contributions are welcome! Please feel free to open an issue or submit a pull request.
- Fork the repository.
- Create your feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.